// get_fun.cpp -- using get() and getline()
//#include <iostream>
//const int Limit = 255;
//
//int main()
//{
//	using std::cout;
//	using std::cin;
//	using std::endl;
//
//	char input[Limit];
//
//	cout << "Enter a string for getline() processing:\n";
//	cin.getline(input, Limit, '#');
//	cout << "Here is your input:\n";
//	cout << input << "\nDone with phase 1\n";
//
//	char ch;
//	cin.get(ch);
//	cout << "The next input character is " << ch << endl;
//
//	if (ch != '\n')
//	{
//		cin.ignore(Limit, '\n');	// discard rest of line
//	}
//
//	cout << "Enter a string for get() procesing:\n";
//	cin.get(input, Limit, '#');
//	cout << "Here is your input:\n";
//	cout << input << "\nDone with phase 2\n";
//
//	cin.get(ch);
//	cout << "The next input character is " << ch << endl;
//
//	return 0;
//}

// fileio.cpp -- saving to a file
// #include <iostream>	// not needed for many systems
//#include <fstream>
//#include <string>
//
//int main()
//{
//	using namespace std;
//	string filename;
//
//	cout << "Enter name for new file: ";
//	cin >> filename;
//
//// create output stream object for new file and call it fout
//	ofstream fout(filename.c_str());
//
//	fout << "For your eyes only!\n";		// write to file
//	cout << "Enter your select number: ";	// write to screen
//	float secret;
//	cin >> secret;
//	fout << "Your secret number is " << secret << endl;
//	fout.close();		// close file
//
//// create input stream object for new file and call it fin
//	ifstream fin(filename.c_str());
//	cout << "Here are the contents of " << filename << ":\n";
//	char ch;
//	while (fin.get(ch))	// read character from file and
//		cout << ch;		// write it to screen
//	cout << "Done\n";
//	fin.close();
//
//	return 0;
//}

// count.cpp -- counting characters in a list of files
//#include <iostream>
//#include <fstream>
//#include <cstdlib>	// for exit()
//
//int main(int argc, char* argv[])
//{
//	using namespace std;
//	if (argc == 1)		// quit if no argument
//	{
//		cerr << "Usage: " << argv[0] << " filename[s]\n";
//		exit(EXIT_FAILURE);
//	}
//
//	ifstream fin;		// open stream
//	long count;
//	long total = 0;
//	char ch;
//	
//	for (int file = 1; file < argc; file++)
//	{
//		fin.open(argv[file]);	// connect stream to argv[file]
//		if (!fin.is_open())
//		{
//			cerr << "Could not open " << argv[file] << endl;
//			fin.clear();
//			continue;
//		}
//		count = 0;
//		while (fin.get(ch))
//		{
//			count++;
//		}
//		cout << count << " characters in " << argv[file] << endl;
//		total += count;
//		fin.clear();	// needed for some implementations
//		fin.close();	//disconnect file
//	}
//	cout << total << " characters in all files\n";
//
//	return 0;
//}

// binary.cpp -- binary file I/O
//#include <iostream>	// not required by most systems
//#include <fstream>
//#include <iomanip>
//#include <cstdlib>	// for exit()
//
//inline void eatline() {
//	while (std::cin.get() != '\n')
//	{
//		continue;
//	}
//}
//
//struct planet
//{
//	char name[20];		// name of planet
//	double population;	// its population
//	double g;			// its acceleration of gravity
//};
//
//const char* file = "planets.dat";
//
//int main()
//{
//	using namespace std;
//	
//	planet pl;
//	cout << fixed << right;
//
//// show initial contents
//	ifstream fin;
//	fin.open(file, ios_base::in | ios_base::binary);	// binary file
//	// NOTE: some system don't accept the ios_base::binary mode
//	if (fin.is_open())
//	{
//		cout << "Here are the current contents of the "
//			 << file << " file:\n";
//		while (fin.read( (char*)& pl, sizeof pl) )
//		{
//			cout << setw(20) << pl.name << ": "
//				 << setprecision(0) << setw(12) << pl.population
//				 << setprecision(2) << setw(6) << pl.g << endl;
//		}
//		fin.close();
//	}
//
//// add new data
//	ofstream fout(file,
//			ios_base::out | ios_base::app | ios_base::binary);
//	// NOTE: some systems don't accept the ios::binary mode
//	if (!fout.is_open())
//	{
//		cerr << "Can't open " << file << " file for output:\n";
//		exit(EXIT_FAILURE);
//	}
//
//	cout << "Enter planet name (enter a blank line to quit):\n";
//	cin.get(pl.name, 20);
//	while (pl.name[0] != '\0')
//	{
//		eatline();
//		cout << "Enter planetary population: ";
//		cin >> pl.population;
//		cout << "Enter planet's acceleration of gravity: ";
//		cin >> pl.g;
//		eatline();
//		fout.write((char*)&pl, sizeof pl);
//		cout << "Enter planet name (enter a blank line "
//				"to quit):\n";
//		cin.get(pl.name, 20);
//	}
//	fout.close();
//
//// show revised file
//	fin.clear();	// not required for some implementations, but won't hurt
//	fin.open(file, ios_base::in | ios_base::binary);
//	if (fin.is_open())
//	{
//		cout << "Here are the new contents of the"
//			 << file << " file:\n";
//		while (fin.read( (char*)&pl, sizeof pl ) )
//		{
//			cout << setw(20) << pl.name << ": "
//				 << setprecision(0) << setw(12) << pl.population
//				 << setprecision(2) << setw(6) << pl.g << endl;
//		}
//		fin.close();
//	}
//	cout << "Done.\n";
//	return 0;
//}

// random.cpp -- random access to a binary file
//#include <iostream>		// not required by most systems
//#include <fstream>
//#include <iomanip>
//#include <cstdlib>		// for exit()
//
//const int LIM = 20;
//struct planet
//{
//	char name[LIM];		// name of planet
//	double population;	// its population
//	double g;			// its acceleration of gravity
//};
//
//const char* file = "planets.dat";	// ASSUMED TO EXIST (binary.cpp example)
//inline void eatline() { while (std::cin.get() != '\n') continue; }
//
//int main()
//{
//	using namespace std;
//	planet pl;
//	cout << fixed;
//
//	// show initial contents
//	fstream finout;		// read and write streams
//	finout.open(file,
//		ios_base::in | ios_base::out | ios_base::binary);
//	// NOTE: Some Unix systems require omitting | ios::binary
//	int ct = 0;
//	if (finout.is_open())
//	{
//		finout.seekg(0);	// go to beginning
//		cout << "Here are the current contents of the "
//			 << file << " file:\n";
//
//		while (finout.read( (char*)&pl, sizeof pl) )
//		{
//			cout << ct++ << ": " << setw(LIM) << pl.name << ": "
//				 << setprecision(0) << setw(12) << pl.population
//				 << setprecision(2) << setw(6) << pl.g << endl;
//		}
//		if (finout.eof())
//		{
//			finout.clear();	// clear eof flag
//		}
//		else
//		{
//			cerr << "Error in reading " << file << ".\n";
//			exit(EXIT_FAILURE);
//		}
//	}
//	else
//	{
//		cerr << file << " could not be opened -- bye.\n";
//		exit(EXIT_FAILURE);
//	}
//
//	// change a record
//	cout << "Enter the record number you wish to change: ";
//	long rec;
//	cin >> rec;
//	eatline();		// get rid of newline
//	if (rec < 0 || rec >= ct)
//	{
//		cerr << "Invalid record number -- bye\n";
//		exit(EXIT_FAILURE);
//	}
//
//	streampos place = rec * sizeof pl;	// convert to streampos type
//	finout.seekg(place);	// random access
//
//	if (finout.fail())
//	{
//		cerr << "Error on attempted seek\n";
//		exit(EXIT_FAILURE);
//	}
//
//	finout.read((char*)&pl, sizeof pl);
//	cout << "Your selection:\n";
//	cout << rec << ": " << setw(LIM) << pl.name << ": "
//		 << setprecision(0) << setw(12) << pl.population
//		 << setprecision(2) << setw(6) << pl.g << endl;
//	if (finout.eof())
//	{
//		finout.clear();		// clear eof flag
//	}
//
//	cout << "Enter planet name: ";
//	cin.get(pl.name, LIM);
//	eatline();
//	cout << "Enter planetary population: ";
//	cin >> pl.population;
//	cout << "Enter planet's acceleration of graviry: ";
//	cin >> pl.g;
//	finout.seekp(place);	// go back
//	finout.write((char*)&pl, sizeof pl) << flush;
//	if (finout.fail())
//	{
//		cerr << "Error on attempted write\n";
//		exit(EXIT_FAILURE);
//	}
//
//	// show revised file
//	ct = 0;
//	finout.seekg(0);	// go to beginning of file
//	cout << "Here are the new contents of the " << file
//		 << " file:\n";
//	while (finout.read((char*)&pl, sizeof pl))
//	{
//		cout << ct++ << ": " << setw(LIM) << pl.name << ": "
//			<< setprecision(0) << setw(12) << pl.population
//			<< setprecision(2) << setw(6) << pl.g << endl;
//	}
//	finout.close();
//	cout << "Done.\n";
//
//	return 0;
//}

//# define _CRT_SECURE_NO_WARNINGS
//#include <cstdlib>
//#include <iostream>
//
//int main()
//{
//	using namespace std;
//	cout << "This system can generate up to " << TMP_MAX
//		 << " temporary names of up to " << L_tmpnam
//		 << " characters.\n";
//
//	char pszName[L_tmpnam] = { '\0' };
//	cout << "Here are ten names:\n";
//	for (int i = 0; i < 10; i++)
//	{
//		tmpnam(pszName);
//		cout << pszName << endl;
//	}
//
//	return 0;
//}

// strout.cpp -- incore formatting (output)
//#include <iostream>
//#include <sstream>
//#include <string>
//
//int main()
//{
//	using namespace std;
//	ostringstream outstr;	// manages a string stream
//
//	string hdisk;
//	cout << "What's the name of your hard disk? ";
//	getline(cin, hdisk);
//	int cap;
//	cout << "What's its capacity in GB? ";
//	cin >> cap;
//	// write formatted information to string stream
//	outstr << "The hard disk " << hdisk << " has a capacity of "
//		<< cap << " gigabytes.\n";
//	string result = outstr.str();	// save result
//	cout << result;					// show contents
//
//	return 0;
//}